package com.zyl.blog.common.strategy;

import com.zyl.blog.common.annotation.Sensitive;

/**
 * 地址脱敏策略
 * 规则：保留前6位字符，后面用*代替（可通过prefixLen调整保留长度）
 * 示例：北京市海淀区********
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.common.strategy
 * @ClassName: AddressSensitiveStrategy
 * @Author FinalFantasy
 * @Date 2025/9/8-10:35
 */
public class AddressSensitiveStrategy extends AbstractSensitiveStrategy {

    /**
     * 地址脱敏实现
     * 保留前6个字符，后面用*填充，最多显示10个*
     */
    @Override
    public String desensitize(String value, Sensitive annotation) {
        if (value == null || value.isEmpty()) {
            return value;
        }

        // 如果注解中指定了前缀长度，则使用注解配置，否则使用默认值6
        int prefixLen = annotation.prefixLen() > 0 ? annotation.prefixLen() : 6;

        // 地址最长显示10个掩码字符
        int maskLen = Math.min(value.length() - prefixLen, 10);
        if (maskLen < 0) {
            return value;
        }

        return value.substring(0, prefixLen) +
                String.valueOf(annotation.maskChar()).repeat(maskLen);
    }
}
